iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0
AI & Data

Tableau 輕鬆學系列 第 24

[Day24] Tableau 輕鬆學 - TabPy 使用方法 1

  • 分享至 

  • xImage
  •  

前言

簡單來說,Python 在 Tableau Desktop 中使用方法有兩種,第一種是將 TabPy 當作 Python 直譯器,將 Python 程式碼直接寫在 Tableau Desktop 中,需要運算時再將該程式碼傳送給 TabPy 執行。第二種是預先寫好函式,將其存放於 TabPy Server,Tableau 要呼叫時只需指定函式名稱與傳遞資料即可。這裡會分享如何使用第一種方式,將 Python 整合進 Tableau Desktop 使用。

使用方法

Sample - Superstore 為資料來源,開啟一個全新的工作簿,我們將會建立四個 Calculated Field 分別使用 SCRIPT_BOOLSCRIPT_INTSCRIPT_REALSCRIPT_STR 四個函式來示範如何在 Tableau Desktop 中使用 Python。

這四個函式的參數格式都相同 (string, expression, ...),第一個參數為 Python 程式碼,第二個與之後的參數都為所要傳遞的資料。TabPy 預設以 _arg# 變數名稱來存取 Tableau 傳遞來的資料,# 代表從 1 開始的數字,數字依資料所在的參數位置而定。所有傳遞的資料在 TabPy 中都會以 List 的型態存在,因此所有的 _arg# 都為 List 物件

SCRIPT_BOOL

建立一個名為 銷售額大於10000 的 Calculated Field 且其函式如下,意思是若銷售額 SUM([Sales]) 大於 10000,對應的回傳值會是 True,反之為 FalseSUM([Sales]) 為第 1 個資料參數,因此若想在 Python 程式中存取則是使用 _arg1 變數名

SCRIPT_BOOL("return [x > 10000 for x in _arg1]", SUM([Sales]))

SCRIPT_INT

建立一個名為 2倍銷售額 的 Calculated Field 且其函式如下,意思是在 Python 中先將資料各別乘以 2 再取整數回傳

SCRIPT_INT("return [int(x * 2) for x in _arg1]", SUM(Sales))

SCRIPT_REAL

建立一個名為 銷售額平方根 的 Calculated Field 且其函式如下,意思是在 Python 中先將 math 套件 import 進來,再將資料各別取根號值回傳

SCRIPT_REAL("import math
return [math.sqrt(x) for x in _arg1]", SUM([Sales]))

SCRIPT_STR

建立一個名為 銷售額說明 的 Calculated Field 且其函式如下,這裡傳入兩種資料分別為銷售額 SUM([Sales]) 與州名 ATTR([State]),在 Python 中要存取銷售額是使用 _arg1,而存取州名是使用 _arg2 變數名稱,因為它是第 2 個傳入的資料參數

SCRIPT_STR("
return [f'{x[1]} 的銷售額為 {int(x[0])}' for x in zip(_arg1, _arg2)]
", SUM([Sales]), ATTR([State]))

顯示

State銷售額大於10000銷售額說明 拖曳到 Rows,Sales2倍銷售額銷售額平方根 拖曳到 Columns,簡單地人工肉眼驗證是否運算正確

TabPy 運算結果視覺化

結語

透過簡單的例子示範如何將 Python 寫在 Tableau Desktop 之中並獲得回傳值,讓讀者有辦法運用這四個函式創造出自己的計算方法。這種使用方式很直接,因為程式碼是嵌在工作簿內的,但這種作法也有缺點,若其他工作簿也需要使用該程式碼,就必須複製同一份程式碼至不同的工作簿中,最後變得難以管理。

工作簿原始檔案

完成的工作簿

在實作中遇到困難是難免的,這裡提供原始檔作為參考,若仍然無法解決歡迎至下方討論區留言。


上一篇
[Day23] Tableau 輕鬆學 - TabPy 安裝與連線
下一篇
[Day25] Tableau 輕鬆學 - TabPy 使用方法 2
系列文
Tableau 輕鬆學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言